package framework.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;


/**
 * 快速开发产品原型的辅助类
 *
 * @author 吴宇亮
 * @date 2018年12月27日
 */
public class _DemoUtil {

	private static Random random = new Random();

	/**
	 * 获取介于[min, max)的整形随机数。 示例：可以获取随机状态
	 * 
	 * @param min 随机数最小值范围
	 * @param max 随机数最大值范围
	 */
	public static int randomInt(int min, int max) {
		return random.nextInt(max) % (max - min + 1) + min;
	}
	
	/**
	 * 生成指定位数的随机数
	 * @param numLength 指定的位数
	 * @return
	 */
	public static String randomInt(int numLength){
		String val = "";
		Random random = new Random();
		for (int i = 0; i < numLength; i++) {
			val += String.valueOf(random.nextInt(10));
		}
		return val;
	}

	/**
	 * 随机获得人的名称
	 */
	public static String randomPersonname() {
		return personnameArr[randomInt(0, personnameArr.length - 1)];
	}
	private static String[] personnameArr = { "刘一", "陈二", "张三", "李四", "王五", "赵六", "孙七", "周八", "吴九", "郑十" };
	
	
	/**
	 * 随机获得电话号码
	 */
	public static String randomPhone() {
		return "";
		//return personnameArr[randomInt(0, personnameArr.length - 1)];
	}
	
	
	/**
	 * 随机获得城市的名称
	 */
	public static String randomCity() {
		return randomArr(cityArr);
	}
	private static String[] cityArr = { "广州", "佛山", "北京", "上海", "东莞", "深圳", "香港", "澳门" };
	
	/**
	 * 随机获得车牌的名称
	 */
	public static String randomCar() {
		return randomArr(carArr);
	}
	private static String[] carArr = { "宝马", "奔驰", "大众", "本田", "丰田", "法拉利", "北京现代", "悍马" };
	
	/**
	 * 随机获得审批状态
	 */
	public static String randomAuditStatus() {
		return randomArr(auditStatusArr);
	}
	public static String[] auditStatusArr = {
		"<font color='blue'>新建</font>", 
		"<font color='orange'>审批中</font>", 
		"<font color='green'>审批通过</font>", 
		"<font color='red'>审批不通过</font>" 
	};
	
	/**
	 * 随机获得编号
	 */
	public static String randomCode(){
		return "Code." + randomInt(6);
	}
	

	/**
	 * 给定一个数组，随机获得数组里面的内容
	 */
	public static String randomArr(String... arr) {
		return arr[randomInt(0, arr.length)];
	}
	
	/**
	 * 随机获得一个时间，格式为: hh:mm
	 */
	public static String randomTime() {
		return randomInt(0, 24) + ":" + randomInt(0, 60);
	}
	
	/**
	 * 获取本年内的一个随机日期
	 * 
	 */
	/*public static String randomDate() {
		String beginDate = DateUtilities.getDateStr(new Date(), "yyyy") + "-01-01";
		String endDate = DateUtilities.getDateStr(new Date(), "yyyy") + "-12-31";
		return randomDate(beginDate, endDate);
	}*/
	
	/**
	 * 获取指定年份的随机日期
	 * 
	 * @param year 指定年份，格式为yyyy
	 */
	/*public static String randomDate(Object year)  {
		// 时间格式化
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		try {
			Date start = format.parse(year+"-01-01");
			Date end = format.parse(year+"-12-31");
			
			if (start.getTime() >= end.getTime()) {
				return null;
			}
			long date = randomLong(start.getTime(), end.getTime());
			return DateUtilities.getDateStr(new Date(date));
		} catch (Exception e) {
			return DateUtilities.getDateStr(new Date(), "yyyy-MM-dd");
		}
	}*/

	/**
	 * 获取随机日期
	 * 
	 * @param beginDate 起始日期，格式为yyyy-MM-dd
	 * @param endDate 结束日期 ，格式为yyyy-MM-dd
	 */
	/*public static String randomDate(String beginDate, String endDate)  {
		// 时间格式化
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		try {
			Date start = format.parse(beginDate);
			Date end = format.parse(endDate);
			
			if (start.getTime() >= end.getTime()) {
				return null;
			}
			long date = randomLong(start.getTime(), end.getTime());
			return DateUtilities.getDateStr(new Date(date));
		} catch (Exception e) {
			return DateUtilities.getDateStr(new Date(), "yyyy-MM-dd");
		}
	}*/

	private static long randomLong(long begin, long end) {
		long rtn = begin + (long) (Math.random() * (end - begin));
		if (rtn == begin || rtn == end) {
			//如果返回的是开始时间和结束时间，通过递归调用本函数查找随机值
			return randomLong(begin, end);
		}
		return rtn;
	}

	/**
	 * 对list的param字段进行自定义排序。 <br/>
	 * 使用示例：DemoUtil.sortBy(list, "zt", "新建", "审批中", "审批通过", "审批不通过");
	 * 
	 * @param list 待排序的list
	 * @param param 要排序的字段
	 * @param sortRules 排序规则
	 */
	public static void sortBy(List<Map<String, Object>> list, String param, Object... sortRules) {
		//建立排序规则
		Map<Object, Integer> sortRuleMap = new HashMap<Object, Integer>(sortRules.length);
		for(int i = 0, j = sortRules.length; i < j; i++){
			sortRuleMap.put(sortRules[i], i);
		}

		//对list进行排序
		list.sort((Map<String, Object> obj1, Map<String, Object> obj2) -> {
			return sortRuleMap.get(obj1.get(param)) - sortRuleMap.get(obj2.get(param));
		});
	}


	

	

	

}
